clc; clear; close all;

%% 参数设置
b_min = 0.8;
b_max = 1.60;
Nb    = 500;               % 参数步数
b_vals = linspace(b_min, b_max, Nb);
f = @SOIM;                 % 使用 SO-IM 映射

N_iter   = 1000;           % 总迭代步数
Transient= 200;           % 瞬态步数（不计入计算）
KeepNum  = 500;            % 分岔图记录步数

% 初始条件 (x0, φ0) = (0.1, 1)
x0   = 0.1;
phi0 = 0.5;

%% 结果存储
LE1_array = zeros(1, Nb);   % 存储最大李雅普诺夫指数
LE2_array = zeros(1, Nb);   % 存储第二个李指数

Bif_x = [];   % 存储分岔图 x 值
Bif_b = [];   % 存储对应的参数 b

%% 主循环: 扫描参数
for ib = 1:Nb
    b = b_vals(ib);
    
    % 调用封装好的 LE 函数
    [LE1, LE2, xStore] = LE(f, b, x0, phi0, N_iter, Transient, KeepNum);
    
    % 存储李雅普诺夫指数
    LE1_array(ib) = LE1;
    LE2_array(ib) = LE2;
    
    % 记录分岔图数据
    Bif_x = [Bif_x, xStore];               
    Bif_b = [Bif_b, b * ones(1, KeepNum)];
end

%% 绘图
% 子图1: 李雅普诺夫指数
subplot(2,1,1); hold on; box on; grid on;
plot(b_vals, LE1_array, 'r', 'LineWidth',1, 'DisplayName','LE1');
plot(b_vals, LE2_array, 'b', 'LineWidth',1, 'DisplayName','LE2');
yline(0, 'k--');
xlabel('b'); ylabel('Lyapunov Exponents');
legend('Location','best');
title('Lyapunov Exponents vs. b (SO-IM map)');

% 子图2: 分岔图
subplot(2,1,2); hold on; box on; grid on;
plot(Bif_b, Bif_x, '.', 'MarkerSize',1, 'Color',[0.2,0.8,0.8]);
xlabel('b'); ylabel('x_{1}(max)');
title(' SO-IM 模型分岔图');
